// 接口: 
// 1. TypeScript的核心原则之一是对值所具有的结构进行类型检查
// 2. 接口的作用就是为这些类型命名和为你的代码或第三方代码定义契约。
export { };
//  1. 对象
interface PersonState {
	// 必须属性
	name: string
	age: number
	// 可选属性
	sex?: string
	// 只读属性
	readonly code: number
	// 其他属性
	[propsName: string]: any
}

const o: PersonState = {
	code: 110,
	name: '张三',
	age: 18,
	sex: '男',

	weight: 60,
	height: 180,
	like: ['足球', '篮球']
}


const o1: PersonState = {
	code: 120,
	name: '小李',
	age: 20,
}

// 2. 函数类型
// 见 func 文件
// 3. 可索引的类型
// ---- 不建议使用
interface ArrayString {
	[propsName: number]: string | boolean
}

const arr: number[] = [1, 2, 3, 4, 5]
const arr1: string[] = ['a', 'b', 'c', 'd'] 

const arr2: ArrayString = ['a', 'b', 'c', 'd', true]

// 4. 类类型